import cplistHtml from 'ngtemplate!html!../../../tpls/dialog/cplist.dialog.html';

class CourseController {
    constructor($rootScope, $scope, $cookieStore, $timeout, $state, ngDialog, dialogService, arrayService, CourseService, getCpList, iRunner, getRaceDetail){

    	var vm = this;

    	vm.$rootScope    = $rootScope;
    	vm.$cookieStore  = $cookieStore;
    	vm.$timeout 	 = $timeout;
    	vm.$state   	 = $state;
    	vm.ngDialog 	 = ngDialog;
    	vm.dialogService = dialogService;
    	vm.arrayService  = arrayService;
    	vm.CourseService = CourseService;
    	vm.getCpList     = getCpList;
    	vm.iRunner 	     = iRunner;
        vm.getRaceDetail = getRaceDetail;
        
        // 计时点类型列表
        vm.cp_type_list  = iRunner.cpTypeConfig; 

        // 拖拽配置
        vm.sortableConfig = { group: 'cp', animation: 150 };

        // 赛道类型
        vm.track_types = iRunner.courseConfig.trackTypes;

        // 比赛类型
        vm.race_types = iRunner.courseConfig.raceTypes;

        // 缓存计时点数据
        vm.listGroups = [];

        // 缓存导入计时点
        vm.othersCp = [];
		
		// 计时点列表
        vm.getCpList.code==0&&(vm.message = vm.getCpList.data);

        // 表单数据初始化
        vm.course = {
            course_name: '',
            course_num: '',
            course_start_time: vm.getRaceDetail.data.start_time,
            course_end_time: vm.getRaceDetail.data.start_time,
            course_close_time: vm.getRaceDetail.data.start_time,
            course_track_type: 'oneway',
            course_race_type: '0',
            course_distance: '',
            course_timing: '',
            format_type: '1',
            timing: '0',
            lap_time: '',
            ranking_man: false,
            ranking_woman: false,
            team_ranking_man: false,
            team_ranking_woman: false,
            ranking_team: false
        }


        // 监听发枪时间变化
        $scope.$watch(angular.bind(vm, () => vm.course.course_start_time ), (newValue, oldValue) => {
            if (newValue) {
                angular.element(document.getElementsByName('startTime')).removeAttr("style")
            }
        });

        // 监听出发时间变化
        $scope.$watch(angular.bind(vm, () => vm.course.course_end_time ), (newValue, oldValue) => {
            if (newValue) {
                angular.element(document.getElementsByName('endTime')).removeAttr("style")
            }
        });

        // 监听最晚关门时间变化
        $scope.$watch(angular.bind(vm, () => vm.course.course_close_time ), (newValue, oldValue) => {
            if (newValue) {
                angular.element(document.getElementsByName('closeTime')).removeAttr("style")
            }
        });

        // 监听赛道类型变化，置空计时点表格
        vm.changeFn = (newValue) => {
            if (newValue) {
                vm.listGroups = [];
                console.log(newValue)
            }
        }

        // 点击显示导入计时点数据
        vm.importCp = function() {

            // 置空
            vm.othersCp = [];

            // 取出其他的CP点
            if (vm.course.course_track_type != 'retrace' && vm.course.course_track_type != 'custom') {
                angular.forEach(vm.message, function(value, index){
                    if (vm.listGroups.indexOf(value)==-1) {
                        vm.othersCp.push(value)
                    }
                });
            } else if (vm.course.course_track_type == 'retrace' || vm.course.course_track_type == 'custom') {
                console.log(vm.message);
                vm.othersCp = vm.message
            }

            console.log(vm.othersCp)

            // 显示模态框
            this.ngDialog.open({
                template: cplistHtml,
                className: 'ngdialog-theme-default ngdialog-alert',
                scope: $scope
            });
        }

        // 导入计时点
        vm.importCpBtn = function() {
            var cpData = document.getElementsByName("cpData");  
            for(var i = 0; i < cpData.length; i++) {    
                if(cpData[i].checked) {
                    angular.forEach(vm.othersCp, function(value, index){
                        if (i==index) {
                            console.log(value);
                            vm.listGroups.push(value)
                        }
                    });
                }
            }
            console.log(vm.listGroups)
        }

        // 表单提交
        vm.submitForm = function(isValid) {
            
            // 验证失败, 提示用户
            if (!isValid) {

                if (!vm.course.course_name) {
                    $.blink(angular.element(document.getElementsByName('courseName')), 5, 100)
                } else if (!vm.course.course_num) {
                    $.blink(angular.element(document.getElementsByName('courseNum')), 5, 100)
                } else if (!vm.course.course_start_time) {
                    $.blink(angular.element(document.getElementsByName('startTime')), 5, 100)
                } else if (vm.course.course_track_type=='oneway'&&!vm.course.course_end_time) {
                    $.blink(angular.element(document.getElementsByName('endTime')), 5, 100)
                } else if (!vm.course.course_close_time) {
                    $.blink(angular.element(document.getElementsByName('closeTime')), 5, 100)
                } else if (vm.course.course_track_type=='circle'&&vm.course.course_race_type==0&&!vm.course.course_timing) {
                    $.blink(angular.element(document.getElementsByName('courseTiming')), 5, 100)
                } else if ((vm.course.course_track_type=='circle' || vm.course.course_track_type=='retrace')&&!vm.course.course_distance) {
                    $.blink(angular.element(document.getElementsByName('courseDistance')), 5, 100)
                } else if ((vm.course.course_track_type=='circle' || vm.course.course_track_type=='retrace')&&!vm.course.lap_time) {
                    $.blink(angular.element(document.getElementsByName('courseLapTime')), 5, 100)
                }


            }

            // 验证通过
            if (isValid) {

                if (vm.course.course_num<=0) {
                    $.blink(angular.element(document.getElementsByName('courseNum')), 5, 100)
                    return false
                } else if (vm.course.course_track_type=='oneway'&&!vm.course.course_end_time) {
                    $.blink(angular.element(document.getElementsByName('endTime')), 5, 100)
                    return false
                }

                // 计算比赛排名类型
                // var ranking_man        = vm.course.ranking_man ? 2 : 0,
                //     ranking_woman      = vm.course.ranking_woman ? 4 : 0,
                //     team_ranking_man   = vm.course.team_ranking_man ? 16 : 0,
                //     team_ranking_woman = vm.course.team_ranking_woman ? 32 : 0,
                //     ranking_team       = vm.course.ranking_team ? 64 : 0;
                    
                // var person_score_show  = ranking_man + ranking_woman;
                // var team_score_show    = team_ranking_man + team_ranking_woman + ranking_team;
                // var score_show         = vm.course.format_type == '8' ? (parseInt(vm.course.format_type) + team_score_show) : (parseInt(vm.course.format_type) + person_score_show);
                var latest_gun_time    = vm.course.course_track_type == 'oneway' ? (moment(vm.course.course_end_time).format('YYYY-MM-DD') + ' ' + moment(vm.course.course_end_time).format('HH:mm:ss')) : '';
                var close_time         = moment(vm.course.course_close_time).format('YYYY-MM-DD') + ' ' + moment(vm.course.course_close_time).format('HH:mm:ss');

                // 出发时间不能小于发枪时间
                if (latest_gun_time&&(moment(latest_gun_time)<moment(vm.course.course_start_time))) {
                    dialogService.error('出发时间不能小于发枪时间')
                    return false
                }

                // 最晚关门时间不能小于出发时间
                if (moment(close_time)<moment(latest_gun_time)) {
                    dialogService.error('最晚关门时间不能小于出发时间')
                    return false
                }

                // 计算CP点排序
                var array          = [],
                    laptimeArray   = [],
                    cptyArr        = [],
                    cpType         = document.getElementsByName('cpType');

                angular.forEach(vm.listGroups, function(value, index) {
                    //计时点编号
                    array.push(value.cp_index);
                    //计时点间隔时间
                    console.log($($('.laptime')[index]).val());
                    laptimeArray.push($($('.laptime')[index]).val());
                });

                for (var i = 0; i < cpType.length; i++) {
                    cptyArr.push(cpType[i].value);
                }

                // 拼接POST数据格式
                var params = {
                    course_name: vm.course.course_name,
                    reg_num: vm.course.course_num,
                    course_type: vm.course.course_track_type,
                    calc_seq: array.join(','),
                    cp_laptime: laptimeArray.join(','),
                    cp_type: cptyArr.join(','),
                    gun_time: moment(vm.course.course_start_time).format('YYYY-MM-DD HH:mm:ss'),
                    latest_gun_time: latest_gun_time,
                    close_time: close_time,
                    dist_team: vm.course.format_type == 8 ? 'yes' : 'no',
                    auto_fill_start: vm.course.timing == 0 ? 'yes' : 'no'
                    // ,
                    // score_show: vm.course.format_type == '8' ? 120 : 7
                    // score_show: score_show
                }

                // check 发枪时间在比赛开始时间里
                if (params.gun_time < vm.getRaceDetail.data.start_time) {
                    dialogService.error('科目发枪时间不能小于赛事开始时间，请重新编辑');
                    return false;
                } else if (params.gun_time > vm.getRaceDetail.data.end_time) {
                    dialogService.error('科目发枪时间不能大于赛事结束时间，请重新编辑');
                    return false;
                } else if (!params.close_time && params.close_time < vm.getRaceDetail.data.start_time) {
                    dialogService.error('科目关门时间不能小于赛事开始时间，请重新编辑');
                    return false;
                } else if (!params.close_time && params.close_time > vm.getRaceDetail.data.end_time) {
                    dialogService.error('科目关门时间不能大于赛事结束时间，请重新编辑');
                    return false;
                }

                // 判断是否为绕圈定时
                if (vm.course.course_track_type == 'circle' &&  vm.course.course_race_type == 0) {
                    params.race_type = 'timing';
                    params.time      = vm.course.course_timing;
                }

                // 判断是否为绕圈定距
                if (vm.course.course_track_type == 'circle' &&  vm.course.course_race_type == 1) {
                    params.race_type = 'distance';
                    params.circle    = vm.course.course_distance;
                }

                // 判断是否为绕圈定距
                if (vm.course.course_track_type == 'retrace') {
                    params.circle = vm.course.course_distance;
                }

                // 判断是否为绕圈或折返显示单圈时间
                if (vm.course.course_track_type=='circle' || vm.course.course_track_type=='retrace') {
                    params.lap_time = vm.course.lap_time;
                }

                console.log(params);

                vm.CourseService.postCourseCreate(params, vm.$cookieStore.get('access_token'), vm.$state.params.race_id)
                .then(function(data) {

                    // 成功调用
                    data.code==0&&vm.dialogService.success('创建成功', 'dashboard.race.index');

                    // 调用失败, 提示用户
                    (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);

                    // 登录信息已过期, 请重新登录
                    data.code==-1001&&vm.dialogService.error(data.message, true);

                    console.log(data)
                }, function(data) {
                    console.log('error')
                });

            }
            
            return false;
        }

    }
}

CourseController.$inject = ['$rootScope', '$scope', '$cookieStore', '$timeout', '$state', 'ngDialog', 'dialogService', 'arrayService', 'CourseService', 'getCpList', 'iRunner', 'getRaceDetail']; 

export default CourseController;
